%# -*- coding: utf-8-unix -*-
%%==================================================
\chapter{系统的传递函数模型}

前面已经提到，控制的目标是让受控对象按预定的方式工作。具体的说就是通过设计和实现控制器，使被控对象的状态（变量）向我们期望的状态变化。为了进行合理的控制器设计，我们首先要对系统进行建模，也就是给出被控变量变化的规律。

在我们的物理世界中，使用微分方程来描述对象状态的变化规律是很自然的。无论是机械系统或者电气系统，都比较容易找到对应的微分方程模型。然而，一般形式的微分方程求解并不容易，这阻碍了我们对被控变量的分析。因此需要寻找便于求解的数学描述。

对于线性时不变（LTI）系统，利用拉普拉斯变换，可以将时域中的微分方程转换为频域中的代数方程，求解更加简便。同时频域中描述的传递函数模型还有物理特性明确和便于分析复杂系统的优点，因此被广泛使用。本章中我们将对这一经典控制系统理论中非常重要的传递函数模型进行详细的介绍。

\section{系统状态变化的微分方程描述}

考虑沿直线运动的单位质量质点。该质点的状态可能包括位置、速度、加速度等等。根据牛顿运动定律，其位置和速度的变化满足下面的微分方程：

\begin{align}
v(t)=\frac{dx(t)}{dt} \\
a(t)=\frac{dv(t)}{dt}
\end{align}

考虑质点做匀速运动的例子：

质点的运动可由下面的微分方程确定

\begin{align}
\dot{x}(t)=v
\end{align}

该质点的位置可通过积分求得，即

\begin{align}
\int_0^t{\dot{x}(\tau)}d\tau=\int_0^t{v}d\tau
\end{align}

最终解得

\begin{align}
x(t)=x(0)+v*t
\end{align}

可以看到，在上面的例子中，如果我们通过某个驱动器改变质点的速度，就可以改变该质点的位置。比如将速度设为0，则位置保持不变；将速度设为负值，则位置减小；将速度设为正值，位置增大。也就是说，作为被控对象的质点的输入信号为速度，输出信号为位置。

\begin{figure}[!htp]
\centering
\includegraphics[width=10cm]{../../notes/images/particle.png}
\caption{质点对象的输入与输出}
\label{fig1-1}
\end{figure}

质点的例子非常简单，我们通过对它的微分方程进行积分就可以得到状态变化方程。然而，已知更一般系统的微分方程，要求解其状态的变化方程并不容易，很难直接使用积分的方法。

例如，我们在质点微分方程（1.1）的基础上增加一项

\begin{align}
\dot{x}(t)+3x(t)=v
\end{align}

这时，直接积分求解变得困难。不过，对于这一类线性时不变（LTI）系统，我们可以使用拉普拉斯变换实现方程的简单求解。


\section{线性时不变（LTI）系统的微分方程求解}

线性系统是指满足叠加性和齐次性的系统。

虽然线性系统是整个系统定义域中一个非常小的子集，但很多系统的主要特征或小信号变化都表现为线性系统，因此也可以使用线性系统表示。

其中系统的时不变特性指的是系统的模型参数不随时间变化。

为了求解质点微分方程（5），我们将每一项乘$e^{-st}$

\begin{align}
\dot{x}(t)e^{-st}+3x(t)e^{-st}=v*e^{-st}
\end{align}

然后再进行积分

\begin{align}
\int_0^{\infty}{\dot{x}(t)e^{-st}dt}+\int_0^{\infty}{3x(t)e^{-st}dt}=\int_0^{\infty}{v*e^{-st}dt}
\end{align}

这实际上是对每一项都进行拉普拉斯变换。

\begin{mydef}{拉普拉斯变换}{}
\begin{align}
F(s)=L[f(t)]=\int_{0^-}^{\infty}f(t)e^{-st}dt
\end{align}
\end{mydef}

\begin{mydef}{拉普拉斯反变换}{}
\begin{align}
f(t)=L^{-1}[F(s)]=\frac{1}{2 \pi j}\int_{\sigma-j\infty}^{\sigma+j\infty}F(s)e^{+st}ds
\end{align}
\end{mydef}

本书中不打算给出详细的拉普拉斯变换计算的细节，仅给出用于分析的变换对和重要性质。

\begin{figure}[!htp]
\centering
\includegraphics{../../notes-2/images/lapulas.png}
\caption{拉普拉斯变换对}
\label{fig1-2}
\end{figure}


根据拉普拉斯变换对照表，可知

\begin{align}
\int_0^{\infty}{\dot{x}(t)e^{-st}dt} &= sX(s)-x(0) \\
\int_0^{\infty}{3x(t)e^{-st}dt} &= 3X(s) \\
\int_0^{\infty}{v*e^{-st}dt} &= \frac{v}{s}
\end{align}

所以

\begin{align}
sX(s)-x(0) + 3X(s) = \frac{v}{s}
\end{align}

在转换得到的频域方程中，通过代数运算即可求得$X(s)$

\begin{align}
X(s) = \frac{x(0)}{s+3} + \frac{v}{s(s+3)}
\end{align}

再使用反拉普拉斯变换，就可以得到状态变化方程$x(t)$。

对$X(s)$进行拉普拉斯反变换就是对右侧每一项进行反变换。这里首先可以容易的得到第一项的反变换

\begin{align}
L^{-1}\left[\frac{x(0)}{s+3}\right] = x(0)e^{-3t}
\end{align}

为了基于拉普拉斯对照表对右侧第二项进行拉普拉斯反变换，我们将其拆分成

$$
\frac{a_1}{s}+\frac{a_2}{s+3}
$$

的两项

首先计算$a_1,a_2$，这里使用留数法：

\begin{align}
a_1 = s\frac{v}{s(s+3)}\bigg|_{s=0} = \frac{v}{3}\\
a_2 = (s+3)\frac{v}{s(s+3)}\bigg|_{s=-3} = -\frac{v}{3}
\end{align}

所以

$$
\frac{v}{s(s+3)} = \frac{v/3}{s} - \frac{v/3}{s+3}
$$

再对分解出的两项分别进行拉普拉斯反变换，可以得到

\begin{align}
L^{-1}\left[\frac{v}{s(s+3)}\right] = \frac{v}{3} - \frac{v}{3}e^{-3t}
\end{align}

最终计算出时域响应为

\begin{align}
x(t) = x(0)e^{-3t} + \frac{v}{3} - \frac{v}{3}e^{-3t}
\end{align}

可以看到，使用拉普拉斯变换求解微分方程的过程步骤如下：

\fbox{%
  \parbox{\textwidth}{%
（1）使用拉普拉斯变换，将微分方程中的每一项转换到频域；

（2）在频域中使用代数运算求方程的解$X(s)$；

（3）使用拉普拉斯反变换，将频域解$X(s)$转换为时域解$x(t)$。
  }%
}

\\

作为对照，我们也可以使用拉普拉斯变换容易的求解微分方程（2）。首先对每一项进行拉普拉斯变换

\begin{align}
sX(s)-x(0) = \frac{v}{s}
\end{align}

然后通过代数运算求$X(s)$

\begin{align}
X(s) = \frac{x(0)}{s} + \frac{v}{s^2}
\end{align}

最后将频域解转换为时域解

\begin{align}
x(t)=x(0)+v*t
\end{align}

这里求得的解（15）与（4）是一样的。


\section{线性微分方程解的分析}

从上述频域中的解可以看到，解$X(s)$由与初始状态有关的项和与输入有关的项叠加构成。下面我们详细分析一下。

\begin{example}

	已知初始条件$y(0)=1,\dot{y}(0)=0$，解微分方程

	\begin{align}
	\frac{d^2y}{dt^2}+4\frac{dy}{dt}+3y=0
	\end{align}

	\soln
	
	按使用拉普拉斯变化对微分方程求解的步骤进行求解：

	（1）对微分方程的每一项进行拉普拉斯变换
	\begin{align}
	\left[s^2Y(s)-sy(0)-\dot{y}(0)\right] + 4\left[sY(s)-y(0)\right] + 3Y(s)=0
	\end{align}

	（2）解出$Y(s)$

	\begin{align}
	Y(s) = \frac{(s+4)y(0)+\dot{y}(0)}{s^2+4s+3}
	\end{align}

	（3）进行拉普拉斯反变换

	首先代入初值，有

	\begin{align}
	Y(s) = \frac{(s+4)}{s^2+4s+3} = \frac{(s+4)}{(s+1)(s+3))}
	\end{align}

	使用留数法将右侧展开

	$$
	a_1 = (s+1)\frac{(s+4)}{(s+1)(s+3))}\bigg|_{s=-1} = \frac{3}{2}
	$$

	$$
	a_2 = (s+3)\frac{(s+4)}{(s+1)(s+3))}\bigg|_{s=-3} = -\frac{1}{2}
	$$

	则有

	\begin{align}
	Y(s) = \frac{3}{2}\frac{1}{s+1} - \frac{1}{2}\frac{1}{s+3}
	\end{align}

	因此利用拉普拉斯反变换可以得到方程的时域解为

	\begin{align}
	y(t) = \frac{3}{2}e^{-t} - \frac{1}{2}e^{-3t}
	\end{align}

\end{example}

\begin{example}

	已知初始条件$y(0)=0,\dot{y}(0)=0$，解微分方程

	\begin{align}
	\frac{d^2y}{dt^2}+4\frac{dy}{dt}+3y=2
	\end{align}

	\soln

	求解步骤与前面的例子相同。

	（1）对微分方程的每一项进行拉普拉斯变换

	\begin{align}
	\left[s^2Y(s)-sy(0)-\dot{y}(0)\right] + 4\left[sY(s)-y(0)\right] + 3Y(s) = \frac{2}{s}
	\end{align}

	（2）解出$Y(s)$

	\begin{align}
	Y(s) = \frac{(s+4)y(0)+\dot{y}(0)+\frac{2}{s}}{s^2+4s+3}
	\end{align}

	（3）进行拉普拉斯反变换

	首先代入初值，有

	\begin{align}
	Y(s) = \frac{2}{s(s^2+4s+3)} = \frac{2}{s(s+1)(s+3))}
	\end{align}

	使用留数法将右侧展开

	$$
	a_1 = s\frac{2}{s(s+1)(s+3))}\bigg|_{s=0} = \frac{2}{3}
	$$

	$$
	a_2 = (s+1)\frac{2}{s(s+1)(s+3))}\bigg|_{s=-1} = -1
	$$

	$$
	a_3 = (s+3)\frac{2}{s(s+1)(s+3))}\bigg|_{s=-3} = \frac{1}{3}
	$$

	则有

	\begin{align}
	Y(s) = \frac{2}{3}\frac{1}{s} - 1\frac{1}{s+1} + \frac{1}{3}\frac{1}{s+3}
	\end{align}

	因此利用拉普拉斯反变换可以得到方程的时域解为

	\begin{align}
	y(t) = \frac{2}{3} - e^{-t} + \frac{1}{3}e^{-3t}
	\end{align}

\end{example}

从上面的两个例子可以看到，输入为0时，解的构型包括$e^{-t}$和$e^{-3t}$两个部分，反映了系统本身的特性；而初始状态为0时，解的构型除系统本身的特性项以外，还包括$\frac{2}{3}$项，这是由输入信号通过系统产生。可以看到，系统的零状态响应覆盖了系统特性和输入特性。

还是考虑系统（5），如果令这个系统的输入为0，则有

\begin{align}
\dot{x}(t)+3x(t)=0
\end{align}

使用上一节的计算方法，可以得到频域解

\begin{align}
X(s) = \frac{x(0)}{s+3}
\end{align}

和时域解

\begin{align}
x(t)=x(0)e^{-3t}
\end{align}

【初始状态响应图】

由$e^{-3t}$可知，此初始状态响应随着时间逐渐趋近于0。



如果上述系统的初始状态为0，那么系统的频域解变为

\begin{align}
X(s) &= \frac{v}{s(s+3)} \\
&= \frac{v}{3}*\frac{1}{s} - \frac{v}{3}*\frac{1}{s+3}
\end{align}

对应的时域解为

\begin{align}
x(t)=\frac{v}{3} - \frac{v}{3}*e^{-3t}
\end{align}

系统的输入响应中同样包含$e^{-3t}$项，并与输入的另一个作用叠加。



通过系统的零输入响应（输入为0）和零状态响应（初始状态为0）对比，可以知道系统的输入响应特性包含了系统的状态响应特性，因此我们在分析时，假设初始状态为0，既可以降低分析的复杂度，同时也不会损失分析的完整性。传递函数模型表示的就是初始状态为0时输出信号与输入信号之间的变换关系。

\section{传递函数模型}

一个由微分方程描述的系统，初始状态为0，如图\ref{fig1-3}

\begin{figure}[!htp]
\centering
\includegraphics[width=10cm]{../../notes/images/second-order-system.png}
\caption{二阶系统的状态方程模型}
\label{fig1-3}
\end{figure}

在进行拉普拉斯变换后，输入和输出之间的关系为

\begin{align}
Y(s)=\frac{2}{s^2+4s+3}R(s)
\end{align}

上面频域中输入信号与输出信号之间的比称为系统的“传递函数模型”

\begin{figure}[!htp]
\centering
\includegraphics[width=10cm]{../../notes/images/second-order-system2.png}
\caption{二阶系统的传递函数模型}
\label{fig1-4}
\end{figure}

对于一般的线性系统

\begin{align}
\frac{d^ny(t)}{dt^n}+q_{n-1}\frac{d^{n-1}y(t)}{dt^{n-1}}+ ... + q_1\frac{dy(t)}{dt}+q_0y(t) \\
= p_m\frac{d^mr(t)}{dt^m}+...+p_1\frac{dr(t)}{dt}+p_0r(t)
\end{align}

其中$m \le n$。其传递函数为

\begin{align}
G(s)=\frac{Y(S)}{X(s)}
=\frac{p_m s^m + p_{m-1} s^{m-1} + ... + p_1 s + p_0}
{s^n + q_{n-1} s^{n-1} + ... + q_1 s + q_0}
\end{align}

\section{传递函数的标注形式和matlab函数}

传递函数有两种标准型

（1）有理分式形式

分子分母都是s的多项式，如

$$
G(S)=\frac{2s+12}{s^2+4s+3}
$$

对应的matlab函数为

```
Gs=tf([2 12],[1 4 3])
```

（2）零极点形式

如

$$
G(s)=\frac{2(s+6)}{(s+1)(s+3)}
$$

其中分子分母的因式中s的系数为1

对应的matlab函数为

```
Gs=zpk([-6],[-1 -3],2)
```




传递函数有两种标准形式

\section{实例学习——倒立摆的传递函数模型}


\subsection{传递函数模型的python实现}

python控制系统库（Python Control Systems Library）是一个python包。它可以实现反馈控制系统的基本分析与设计。

例用python中的control模块，使用函数tf(num,den)可以创建系统的传递函数模型

```
from control import tf

num = [1,2]
den = [9,8,7]
Gs = tf(num,den)

print(Gs)
```

执行上面的python程序，得到的传递函数模型为

\begin{figure}[!htp]
\centering
\includegraphics[width=10cm]{../../notes/images/tf1.png}
\bicaption{二阶系统}
\label{fig3}
\end{figure}



\subsection{倒立摆的传递函数模型及python实现}




